package com.example.controller;

import com.example.pojo.User;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;

/**
 * 测试请求参数接收
 */
@RestController // @RestController = @Controller + @ResponseBody
public class RequestController {
    //原始方式

//    //1.原始方法 繁琐，需要手动转换类型
//    @RequestMapping("/simpleParam")
//    public String simpleParam(HttpServletRequest request) {
//
//       //获取请求参数
//        String name = request.getParameter("name");
//        String ageStr = request.getParameter("age");
//
//        int age = Integer.parseInt(ageStr);
//        System.out.println(name += ":" + age);
//        return "ok";
//    }

    //2.springboot接收
//    @RequestMapping("/simpleParam")
//    public String simpleParam(String name,Integer age) {
//        System.out.println(name += ":" + age);
//        return "ok";
//    }


   //3.简单参数接收，@RequestParam映射
    @RequestMapping("/simpleParam")
    //当发起请求为name,接收为username时，age-->newAge，username为null
    public String simpleParam(@RequestParam(value = "name",required = false) String username,@RequestParam (name="age") Integer newAge) {
        //1.简单参数：如果方法形参名称与请求参数名称不匹配，可以使用@RequestParam完成映射，通过name属性名，指定映射名称
        //2.@RequestParam中的required属性，默认为true，表示请求参数必须存在，如果不存在，则报400错误,如果可选，需要设置require=false
        System.out.println(username += ":" + newAge);
        return "ok";
    }

    //4.实体参数
    @RequestMapping("/simplePojo")
  public String simplePojo(User user) {
        System.out.println(user);
        return "ok";
  }

    //4.复杂实体参数
    @RequestMapping("/complexPojo")
    public String complexPojo(User user) {//User{name='张三', age=10, address=Address(province=北京, city=beijing)}
        System.out.println(user);
        return "ok";
    }
    //5.数组参数 http://10.14.3.22:8081/arrayParam?hobby=game&hobby=java
    @RequestMapping("/arrayParam")
   public String arrayParam(String[] hobby) {
       System.out.println(Arrays.toString(hobby));//[game, java]   Arrays.toString() 用于打印
        return "ok";
   }
   //6.数组集合 http://10.14.3.22:8081/listParam?hobby=game&hobby=java
   @RequestMapping("/listParam")
   //使用集合必须通过@RequestParam来绑定参数关系
   public String listParam(@RequestParam List<String> hobby) {
       System.out.println(hobby);//[game, java]
       return "ok";
   }

   //7.日期参数 声明日期格式LocalDateTime 使用@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")来指定前端传递的时间格式  http://10.14.3.22:8081/dateParam?updateTime=2022-12-12 10:05:45

    @RequestMapping("/dateParam")
    public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime) {
        System.out.println(updateTime);//2022-12-12T10:05:45
        return "ok";
    }

    //8.json参数 需要使用@RequestBody来标识  http://10.14.3.22:8081/jsonParam 选择body --raw --json

    //    json参数 {"name":"zs", "age":16, "address":{ "province":"beijing","city":"beijing"}}
    @RequestMapping("/jsonParam")
    public String jsonParam(@RequestBody User user){
        System.out.println(user);//User{name='zs', age=16, address=Address(province=beijing, city=beijing)}
        return "ok";

    }

    //9.路径参数 通过url直接传递参数，使用{...}来标识该路径参数，需要使用@PathVariable来获取路径参数 http://10.14.3.22:8081/path/1/zs
    @RequestMapping("/path/{id}/{name}")
    public  String pathParam(@PathVariable Integer id,@PathVariable String name){
        System.out.println(id+":"+name);//1:zs
        return "ok";
    }
}
